package com.idp.web.service;

import com.idp.common.base.BaseResult;
import com.idp.common.persistence.Page;
import com.idp.web.dto.OrderIndexListDTO;
import com.idp.web.dto.OrderListDTO;
import com.idp.web.entity.Orders;
import com.idp.web.vo.DoctorSearchVo;
import com.idp.web.vo.OrderSearchVo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * 医疗订单service接口
 *
 * @author xubinren
 * @version 1.0
 * @date 2018/3/6
 */
public interface IOrdersService {

    /**
     * 根据条件分页查询订单列表
     *
     * @param orderSearchVo 查询条件
     * @param page          分页信息
     * @return Page<OrderListDTO>
     */
    Page<OrderListDTO> findByPage(OrderSearchVo orderSearchVo, Page<OrderListDTO> page);

    /**
     * 根据条件分页查询订单列表
     *
     * @param orderSearchVo 查询条件
     * @param page          分页信息
     * @return Page<OrderIndexListDTO>
     */
    Page<OrderIndexListDTO> findIndexByPage(OrderSearchVo orderSearchVo, Page<OrderIndexListDTO> page);

    /**
     * 查询订单列表
     *
     * @param orders 查询条件
     * @return List<Orders>
     */
    List<Orders> findBySearch(Orders orders);

    /**
     * 通过ID查询
     *
     * @param id 订单id
     * @return Patient
     */
    Orders getById(String id);

    /**
     * 新建订单信息
     *
     * @param orders 订单信息
     * @param userId 操作人id
     * @return BaseResult
     */
    BaseResult add(Orders orders, String userId);

    /**
     * 修改订单信息
     *
     * @param orders 修改后的患者信息
     * @param userId 操作人id
     * @return BaseResult
     */
    BaseResult update(Orders orders, String userId);

    /**
     * 根据订单id删除对应的订单信息
     *
     * @param id 患者id
     * @return boolean
     */
    boolean delete(String id);

    /**
     * 查询订单的统计信息
     *
     * @param orderSearchVo 查询条件
     * @return int
     */
    int queryStatistics(OrderSearchVo orderSearchVo);

    /**
     * 查询首页订单的统计信息
     *
     * @param orderSearchVo 查询条件
     * @return int
     */
    int queryIndexStatistics(OrderSearchVo orderSearchVo);

    /**
     *  登录用户为护士时设置医院id
     * @param orderSearchVo 查询条件
     * @param userType 登录用户类型：1、管理员,2、医院，3、护士，4、医生，5、患者
     * @param userId 登录用户的id
     * @return OrderSearchVo
     */
    OrderSearchVo setOrderSearchVo(OrderSearchVo orderSearchVo, Integer userType, String userId);

    /**
     *  设置页面类型
     * @param orderSearchVo 查询条件
     * @param userType 登录用户类型：1、管理员,2、医院，3、护士，4、医生，5、患者
     * @param userId 登录用户的id
     * @return OrderSearchVo
     */
    OrderSearchVo getPageType(OrderSearchVo orderSearchVo, Integer userType, String userId);

    /**
     * 确认订单
     * @param orderSearchVo 订单信息，这里只有订单id参数
     * @return BaseResult
     */
    BaseResult comfirmOrder(OrderSearchVo orderSearchVo);

    /**
     * 取消订单
     * @param orderSearchVo 订单信息，这里只有订单id参数
     * @return BaseResult
     */
    BaseResult cancelOrder(OrderSearchVo orderSearchVo);

    /**
     * 分配医生
     *
     * @param doctorSearch 查询信息
     * @return BaseResult
     */
    BaseResult assignDoctor(DoctorSearchVo doctorSearch);
}
